﻿#ifndef SERVER_READ_SESSION_H
#define SERVER_READ_SESSION_H

#include "readsession.h"
#include "udpackserver.h"

namespace TFTP {

/**
* @brief 单个传输会话（读取）
* 表示单个读取会话，并存储信息关于文件和传输本身。
*/
class ServerReadSession : public TFTP::ReadSession
{
public:

    /**
    * @brief Default constructor
    * @param T 要向其发送数据包的对等方的信息
    * @param 收到的WRQ数据包
    */
    ServerReadSession(TransferInfo &T, const QByteArray &dgram);
    ~ServerReadSession();

public:
    /**
    * @brief 将从服务器接收的文件名重新映射到新文件名 [WRQ only]
    * @param oldname 客户端提供的文件名
    * @param newname 保存文件的实际文件名（和路径）
    * @param oneshot 如果为true，则文件名的映射将在传输文件（用于获取时间戳文件）
    */
    static void remapFilename(const QString &oldname, QIODevice *dev, bool oneshot = false);

    /**
    * @brief 删除文件名的映射 [WRQ only]
    * @param oldname 客户端提供的文件名
    */
    static void unmapFilename(const QString &oldname);
protected:
    static QMap<QString, FileMappingItem> mapped;	///< 文件名重新映射到新文件名

};

};

#endif
